
#include <stdio.h>
#include <stdlib.h>

void swap(int *, int *);

void main()
{
    int a = 23, b = 85;
    // 在程序中执意产生指针，是毫无必要的。
    int *p1 = &a, *p2 = &b; // 多余的方式
    swap(p1, p2);           // 可以直接使用swap(&a, &b);
    printf("Now a=%d, b=%d\n", a, b);
    system("pause");
}

void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
    printf("In swap:a=%d, b=%d\n", *a, *b);
}

/*

如果将   指向参数的指针   作为参数传递，则传递的是   参数的地址值    。
因为传递的是形参的地址值，所以就是传递实参本身。
当在函数中改变形参的值时，改变的就是原来实参的值。

数组只能用传地址值的方式。


在传地址值时，系统并不为形参分配新的地址，
而是为指针变量分配地址，指针变量存储的是指向实参的存储地址，
所以若在被调用函数中改变形参的值，也就改变了原来实参的数值。

与传数值不同，传递地址值是直接使用实参的地址，
所以也就没有像传数值那样复制值的过程，
这是传数值和传地址值的关键性区别，也是传递效率不一样的原因。


不过，传递指针只是改变值的必要条件，并不是充分条件。
是否改变原来的值，还要看如何在函数中使用这些参数。
*/